package com.psp.bu.persist.dao;

import java.util.List;
import java.util.Set;

import com.psp.bu.model.ProductAttributeBean;
import com.psp.bu.model.ProductBean;
import com.psp.bu.model.ProductEditInfoBean;
import com.psp.bu.model.ProductSkuBean;
import com.psp.bu.model.ProductUpdateLogBean;
import com.psp.bu.model.UserProductRelationBean;

public interface ProductDao {

	/**
	 * 通过主键查询
	 * 
	 * @param pid
	 * @return
	 */
	ProductBean selectById(String pid);

	/**
	 * 通过 业务组id 和 预定的pid 列表查询出 属于业务组的服务
	 * 
	 * @param buid
	 * @param list
	 * @return
	 */
	List<ProductBean> selectByBuidAndList(String buid, List<String> pids);

	/**
	 * 批量更新在架状态
	 * 
	 * @param buid
	 * @param operList
	 * @param state
	 *            1上架，2下架
	 * @return
	 */
	int updateStateBatch(List<String> pids, int state);

	/**
	 * 批量删除 软删除
	 * 
	 * @param operList
	 * @param isDelete
	 *            1未删除 2删除
	 * @return
	 */
	int updateIsDeleteBatch(List<String> pids, Integer isDelete);

	/**
	 * 删除业务组 和 服务的关系
	 * 
	 * @param operList
	 * @return
	 */
	int deleteUserProductRelationBatch(String buid, List<String> pids);

	/**
	 * 通过 pids 批量查询
	 * 
	 * @param pids
	 * @return
	 */
	List<ProductBean> selectByPids(Set<String> pids);

	/**
	 * 查詢商品的属性
	 * 
	 * @param bid
	 * @return
	 */
	List<ProductAttributeBean> selectAttributeList(String bid);

	/**
	 * 根据sku获取商品信息
	 * 
	 * @param skuCode
	 * @param state
	 *            0正常 1删除
	 * @return
	 */
	ProductSkuBean selectProductInfoBySukCode(String skuCode, Integer state);

	/**
	 * 获取商品数量
	 * 
	 * @param buid
	 * @param shelfState
	 * @return
	 */
	int selectProductCount(String buid, int shelfState);

	/**
	 * 查询商品列表
	 * 
	 * @param page
	 * @param pageSize
	 * @param buid
	 * @param shelfState
	 * @return
	 */
	List<ProductBean> selectProductList(int page, int pageSize, String buid, int shelfState);

	/**
	 * 插入商品信息
	 * 
	 * @param product
	 * @return
	 */
	int insert(ProductBean product);

	/**
	 * 插入用户商品关系
	 * 
	 * @param userproduct
	 * @return
	 */
	int insertUserProduct(UserProductRelationBean userproduct);

	/**
	 * 插入编辑商品信息
	 * 
	 * @param eidtInfo
	 * @return
	 */
	int inserProductEditInfo(ProductEditInfoBean eidtInfo);

	/**
	 * 查询编辑商品信息
	 * 
	 * @param pcode
	 * @return
	 */
	ProductEditInfoBean selectEditInfoByCode(Integer pcode);

	/**
	 * 更新商品信息
	 * 
	 * @param product
	 * @return
	 */
	int update(ProductBean product);

	int updateProductEditInfo(ProductEditInfoBean eidtInfo);

	int insertUpdateLog(ProductUpdateLogBean update);

}
